<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数简介</title>
    <script>
        /* 函数 */
        /* 
        函数
            函数也是一个对象
            普通对象只能装属性，函数可以封装代码或者功能，在需要时可以执行这些功能（代码）
            函数中可以保存一些代码，在需要时使用
            使用typeof检查一个函数对象时，会返回function
        */
        /* {
            console.log("这是第一行");
            console.log("这是第二行");
            console.log("这是第三行");
        } */
        //在实际开发过程中很少使用构造函数来创建一个函数对象
        //创建函数对象
        var fun = new function() {
                console.log(fun);
            }
            //可以将要封装的代码以字符串的形式传递给构造函数
        var fun1 = new Function("console.log('这是第一个函数');");
        //封装到函数中的代码不会立即执行
        //函数中的代码会在函数调用的时候执行
        //调用函数：函数对象()
        //当调用函数时，函数中封装的代码会按照顺序执行
        fun1();
        fun.hello = "nihao";
        /* 
        使用函数声明来创建一个函数
        语法：
            function 函数名([形参1,形参2,...]){
                函数体
            }
        */
        //使用函数声明来创建一个函数
        function fun2() {
            console.log('这是我的第二个函数');
            document.write('2222');
        }
        //调用
        fun2();

        /* 
        使用函数表达式来创建函数

        实际上就是匿名函数赋值给一个变量
        var 函数名 = function([形参1,形参2,...]){
            语句...
        }
        */

        var fun3 = function() {
            console.log("我是匿名函数中封装的代码")
        };
        //调用
        fun3();
    </script>
</head>

<body>

</body>

</html>